interface Maps<T>{
    [key:string]:T
}

// 键值结构中的 键
let keys:keyof Maps<number> // string
// 键值结构中的 值
let valus:Maps<number> // number

interface NewMaps<T,U>{
    [BigKey:U]:T // 索引签名的参数只能为 string 或者 number [数组的为数字，对象的为字符串或者number]
}

type numberString = number | string | boolean

interface NumberMaps<U extends numberString>{
    [NumberKey:number]:U
}

let numberKeys:keyof Maps<string> // number 属于 string的子集 此处既可以是number 或者 string

let numberValues:NumberMaps<number>

let numObj:NumberMaps<boolean> = {
    "1":true,
    "2":false,
}
numberValues = numObj['1']

let stringValues:NumberMaps<string>
stringValues = numObj['2']
